import * as monaco from 'monaco-editor'

/** 外放属性Props */
export interface BwMonacoEditorProps {
  /** 容器 */
  domElement: HTMLElement
  /** 编辑器参数 */
  options?: monacoEditorModel
  /** 代码提示 */
  tips?: string
  /** 右键菜单 */
  menus?: Array<BwMonacoEditorMenuModel>
  /** 代码片段 */
  snippets?: Array<BwMonacoEditorSnippetsModel>
  /** 自定类型代码 */
  types?: string
  /** 指令 */
  commands?: Array<BwMonacoEditorCommandModel>
}

/** 光标定位Model */
export interface BwRangeModel {
  startLineNumber: number
  endLineNumber: number
  startColumn: number
  endColumn: number
}

/** 编辑器参数 */
export type monacoEditorModel =
  monaco.editor.IStandaloneEditorConstructionOptions

/** 代码片段模型 */
export type BwMonacoEditorSnippetsModel = monaco.languages.CompletionItem

/** 菜单模型 */
export interface BwMonacoEditorMenuModel {
  /** 菜单项id */
  id: string
  /** 菜单项名称 */
  label: string
  /** 绑定快捷键 */
  keybindings?: number[]
  /** 所属菜单的分组 */
  contextMenuGroupId: string
  /** 点击后执行的操作 */
  run: () => void | Promise<void>
}

/** 指令模型 */
export interface BwMonacoEditorCommandModel {
  keybinding: number
  handler: monaco.editor.ICommandHandler
  context?: string | undefined
}

export const monacoEditor = monaco
